home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1996 March / macformat-035.iso / Shareware City / Developers / MoreFiles 1.4.1 / !MoreFiles Read Me next >
Encoding:
Text File  |  1996-01-06  |  24.5 KB  |  315 lines  |  [TEXT/ttxt]

  1. MoreFiles
  2.  
  3. A collection of File Manager and related routines
  4.  
  5. by Jim Luther, Apple Macintosh Developer Technical Support Emeritus
  6. with significant code contributions by Nitin Ganatra, Apple Macintosh Developer Technical Support
  7. Copyright © 1992-1996 Apple Computer, Inc.
  8. Portions copyright © 1995 Jim Luther
  9. All rights reserved.
  10.  
  11. You may incorporate this sample code into your applications without restriction, though the sample code has been provided "AS IS" and the responsibility for its operation is 100% yours.  However, what you are not permitted to do is to redistribute the source as "DSC Sample Code" after having made changes. If you're going to re-distribute the source, we require that you make it clear in the source that the code was descended from Apple Sample Code, but that you've made changes.
  12.  
  13.  
  14. What is MoreFiles?
  15.  
  16. MoreFiles is a collection of high-level routines written over the last couple of years to answer File Manager questions developers have sent to Apple Developer Technical Support. The routines have been tested (but not stress-tested), documented, code-reviewed, and used in both my own programs and in several commercial products.
  17.  
  18.  
  19. Important Note
  20.  
  21. These routines are meant to be used from an application environment. In particular, some routines use static variables which require an A5 world and almost all routines make calls that are unsafe at interrupt time (i.e., synchronous File Manager calls and Memory Manager calls). If you plan to use these routines from stand-alone code modules, you may need to make some modifications to the code that uses static variables. Don't even think about using most of these routines from code that executes at interrupt time.
  22.  
  23. Note: If you need to use the routines in FSpCompat in stand-alone 68K code, set GENERATENODATA to 1 in FSpCompat.c so globals (static variables) are not used.
  24.  
  25.  
  26. Build Environments
  27.  
  28. MoreFiles is built using the latest release C development environments I have access to. In particular, MoreFiles v1.4 was built using:
  29.  
  30. •  Universal Interfaces 2.1.1 in “MPW Latest” on MPW Pro #19
  31. •  Latest MPW from E.T.O./MPW Pro #18 (with Universal Interfaces 2.1.1 in “MPW Latest” on MPW Pro #19)
  32. •  THINK C/Symantec C++ 7.0.4 (with Universal Interfaces 2.1.1 in “MPW Latest” on MPW Pro #19)
  33. •  Metrowerks CodeWarrior 7.0 (MW C/C++ 68K 1.3 and MW C/C++ PPC 1.3 with Universal Interfaces 2.1.1 in “MPW Latest” on MPW Pro #19)
  34.  
  35. Note: If you are not using these versions, you will probably have to make some minor changes to compile or link with MoreFiles.
  36.  
  37. The Pascal interfaces to MoreFiles are maintained, but have not been tested with all available Pascal development environments.
  38.  
  39.  
  40. Files in the MoreFile Package
  41.  
  42. MoreFiles.c - the “glue code” for high-level and FSSpec style routines that were never implemented or added to the standard interface for one reason or another. If you're uncomfortable filling in parameter blocks, you'll find the code in this file very useful.
  43.  
  44. MoreFiles.h and MoreFiles.p - the documentation and header files for calling the routines included in MoreFiles.c.
  45.  
  46. Sharing.h and Sharing.p - the inline “glue code” for calling the AppleShare server routines, PBShare, PBUnshare, and PBGetUGEntry. These routines have been added to Files.h in the Universal Interfaces so they aren't used by MoreFiles. However, I've left them here in case you're still using the old interfaces.
  47.  
  48. MoreFilesExtras.c - a collection of useful File Manager utility routines.
  49.  
  50. MoreFilesExtras.h and MoreFilesExtras.p - the documentation and header files for calling the routines included in MoreFilesExtras.c. I recommend that you browse through the header files - you'll probably find a routine that you've always wanted.
  51.  
  52. MoreDesktopMgr.c - a collection of useful high-level Desktop Manager routines. If the Desktop Manager isn't available, the "Desktop" file is used for 'read' operations.
  53.  
  54. MoreDesktopMgr.h and MoreDesktopMgr.p - the header files for calling the routines included in MoreDesktopMgr.c.
  55.  
  56. FileCopy.c - a robust, general purpose file copy routine that does everything the right way. Copying a file on the Macintosh isn't as simple as you'd think if you want to handle all cases (i.e., file server drop boxes, preflighting disk space, etc.). This routine does it all and is fast, too.
  57.  
  58. FileCopy.h and FileCopy.p - the documentation and header files for calling the routines included in FileCopy.c.
  59.  
  60. DirectoryCopy.c - a general purpose recursive directory copy routine with a hook for your error handling routine.
  61.  
  62. DirectoryCopy.h and DirectoryCopy.p - the documentation and header files for calling the routines included in DirectoryCopy.c.
  63.  
  64. FSpCompat.c - the “glue code” for FSSpec style routines that will work under System 6 as much as possible. If you still need to support System 6, you'll find the code in this file very useful.
  65.  
  66. FSpCompat.h and FSpCompat.p -  the header files for calling the routines included in FSpCompat.c.  
  67.  
  68. Search.c - IndexedSearch and PBCatSearchSyncCompat. IndexedSearch performs an indexed search in and below the specified directory using the same parameters as is passed to PBCatSearch. PBCatSearchSyncCompat uses PBCatSearch (if available) or IndexedSearch (if PBCatSearch is not available) to search a volume.
  69.  
  70. Search.h and Search.p - the header files for calling the routines included in Search.c.  
  71.  
  72. FullPath.c - Routines for dealing with full pathnames… if you really must use them. Read the warning at the top of the interface files for reasons why you shouldn't use them most of the time.
  73.  
  74. FullPath.h and FullPath.p - the header files for calling the routines included in FullPath.c.  
  75.  
  76. IterateDirectory.c - Routines that perform a recursive iteration (scan) of a specified directory and call your IterateFilterProc function once    for each file and directory found.
  77.  
  78. IterateDirectory.h and IterateDirectory.p - the header files for calling the routines included in IterateDirectory.c.
  79.  
  80. MoreFiles.π - the THINK C project file (THINK C/Symantec C++ 7.0.4) you can use to build a THINK library.
  81.  
  82. MoreFiles.68K.µ - the Metrowerks C (MW C/C++ 68K 1.3) project file you can use to build a 68K CodeWarrior library.
  83.  
  84. MoreFiles.PPC.µ - the Metrowerks C (MW C/C++ PPC 1.3) project file you can use to build a PowerPC CodeWarrior library.
  85.  
  86. MoreFilesLib.o - the library built with MPW C version 3.3.3 and MPW LIB version 3.4. The library is supplied two ways, with and without MacsBug debugger labels. Use the library with labels to help you debug; use the library without labels for smaller code. (Note: The version of MPW used to build these libraries was Latest MPW from MPW Pro #19.)
  87.  
  88. MoreFiles.68K and MoreFiles.PPC - the library built with CodeWarrior 7. The 68K library is supplied two ways, with and without MacsBug debugger labels. Use the library with MacsBug labels to help you debug; use the library without labels for smaller code.
  89.  
  90. MoreFilesLib - the library built with THINK C/Symantec C++ 7.0.4. The library is supplied two ways, with and without MacsBug debugger labels. Use the library with labels to help you debug; use the library without labels for smaller code. THINK Pascal users should link with these libraries.
  91.  
  92. FindFolderGlue.o - a library containing the FindFolder compatibility glue. This library is needed only by THINK Pascal users.
  93.  
  94. UpperString.p - a UNIT that maps UpperString to UprString for THINK Pascal users.
  95.  
  96. Worksheet - the MPW worksheet used to compile and build the MPW version of the libraries.
  97.  
  98. Note: All libraries are built with SystemSevenOrLater false so that all compatibility code is included.
  99.  
  100. How you use MoreFiles?
  101.  
  102. You can compile the code, put it in a library (or use the precompiled libraries), and link it into your programs. You can cut and paste it into your programs. You can use it as example code. Feel free to rip it off and modify it in whatever ways you find work best for you.
  103.  
  104. All exported routines use Pascal calling conventions so this code can be used from either C or Pascal.
  105.  
  106. You'll also notice that all routines that make other File Manager calls return an OSErr result. I always check for error results and you should too. (Well, there's a few places where I purposely ignore errors, but they're commented in the source.)
  107.  
  108.  
  109. Documentation
  110.  
  111. The documentation for the routines can be found in the header files. There, you'll find a short description of each call and a complete listing of all input and output parameters. For example, here's the documentation for one of the routines, GetFileLocation.
  112.  
  113.     /*****************************************************************************/
  114.     
  115.     pascal  OSErr   GetFileLocation(short refNum,
  116.                                     short *vRefNum,
  117.                                     long *dirID,
  118.                                     StringPtr fileName);
  119.     /*  ¶ Get the location of an open file.
  120.         The GetFileLocation function gets the location (volume reference number,
  121.         directory ID, and fileName) of an open file.
  122.         
  123.         refNum      input:  The file reference number of an open file.
  124.         vRefNum     output: The volume reference number.
  125.         dirID       output: The parent directory ID.
  126.         fileName    input:  Points to a buffer (minimum Str63) where the
  127.                             filename is to be returned or must be nil.
  128.                     output:    The filename.
  129.         
  130.         __________
  131.         
  132.         See also:   FSpGetFileLocation
  133.     */
  134.     
  135.     /*****************************************************************************/
  136.  
  137. Some routines have very few comments in their code because they simply make a single File Manager call. For those routines, the routine description is the comment. However, you'll find that more complicated routines have plenty of comments to clarify what and why the code is doing something. If something isn't clear, take a look at Inside Macintosh: Files for further reference.
  138.  
  139.  
  140. Release Notes
  141.  
  142. v1.0  09/14/93
  143.  
  144. •  First release for Developer CD
  145. ________________________________________
  146.  
  147. v1.1  01/22/94
  148.  
  149. •  MoreFiles is now built with the Universal Interfaces.
  150. •  Gave DirectoryCopy.p and MoreFilesExtras.p the correct UNIT names.
  151. •  Built MoreFiles.lib with THINK C and MoreFilesLib.o with MPW C.
  152. •  Changed the way the GetFilenameFromPathname works function (I made it work correctly for its intended purpose).
  153. •  Added GetObjectLocation function to MoreFilesExtras.
  154. •  Moved local constants from FileCopy.h to FileCopy.c.
  155. •  Moved local constants from DirectoryCopy.h to DirectoryCopy.c.
  156. •  Added Sharing.p. to go along with Sharing.h, but then didn't need either because the Universal Interfaces now include PBShare, PBUnshare, and PBGetUGEntry in Files.h.
  157. •  Added standard disclaimer to all source files.
  158. •  Fixed bug in FSpMoveRename function (it called HCopyFile instead of HMoveRename).
  159. •  Added HMoveRenameCompat and FSpMoveRenameCompat functions to MoreFilesExtras.
  160. •  Changed HOpenAware and HOpenRFAware functions in MoreFilesExtras to work around a bug in Foreign File Access (FFA) based foreign file systems (ISO 9960, High Sierra, Audio, Photo CD Access, etc.). FFA based file systems incorrectly return a wPrErr result to the OpenDeny calls instead of a paramErr result.
  161. •  Added UnmountAndEject function to MoreFilesExtras.
  162. •  The ChangeCreatorType and ChangeFDFlags functions in MoreFilesExtras no longer try (and fail) to use BumpDate on fsRtParID.
  163. •  Added DeleteDirectoryContents and DeleteDirectory functions to MoreFilesExtras.
  164. •  Removed DTS.Lib StringUtils files. The only function needed by MoreFiles was pcpy, so I dropped it into the MoreFiles sources as a static function rather than force you to include all of StringUtils.
  165. •  Fixed conditional #include in MoreFilesExtras.c.
  166. •  In MoreFilesExtras.h, changed macros for checking volume attribute bits to shift the 1L constant rather than the vMAttrib field in the GetVolParmsInfoBuffer. This produces tighter code.
  167. •  Added FSpCompat.c, FSpCompat.h, and FSpCompat.p. The FSpCompat functions let you use the System 7 FSSpec calls under System 6 (the functions use the same calling conventions as the System 7 FSSpec calls but have a modified name (for example, FSpCreate is FSpCreateCompat).
  168. •  Ran all sources through as many C compilers as possible and made minor modifications to all sources in an attempt to get rid of most warnings. There are still a couple left to fix, but I'm up against the deadline for the next Developer CD, so they'll have to wait…
  169. ________________________________________
  170.  
  171. v1.1.1  02/01/94
  172.  
  173. • Added FindFolderGlue.o and its Read Me file to the Libraries folder for THINK Pascal users.
  174. ________________________________________
  175.  
  176. v1.2  07/20/94
  177.  
  178. New Routines:
  179. •  Added GetDInfo, FSpGetDInfo, SetDInfo, FSpSetDInfo, CheckVolLock, CheckObjectLock, and FSpCheckObjectLock to MoreFilesExtras.
  180. •  Added MoreDesktopMgr. In the process, I moved GetComment, SetComment, and CopyComment over from MoreFilesExtras and changed their names (added a DT).  My apologies to anyone this API change screws up. I think the new and improved code makes up for the hassles.
  181. •  Added Search. Ever want to search a volume with PBCatSearch and it isn't available? Then you'll like this code.
  182.  
  183. Enhancements to existing routines:
  184. •  Made changes for powerc.
  185. •  THINK C project is for version 7.0.3.
  186. •  Reformatted code to meet new DTS standards for sample code.
  187. •  Added code to FileCopy to open and copy only file forks that contain data. By doing this, we won't create a data or resource fork for the copied file unless it's really needed (some foreign file systems such as the ProDOS File System and Macintosh PC Exchange have to create additional disk structures to support resource forks).
  188. •  Added code to FileCopy to copy the file attributes to the destination only if the destination is an AppleShare drop box. That way, if the file has the bundle bit set and if FileCopy is modified (by you - read the comments in the source before modification) to give up time to other processes during a copy, any Finder with access to the file won't try to read bundle information from a partially copied resource fork.
  189. •  DirectoryCopy no longer calls your CopyErrProc with a copyDirCommentOp failed operation code. There's really nothing wrong with comments not getting copied and DirectoryCopy does give it its best effort.
  190. •  Modified OpenAware and OpenRFAware functions to check for locked volume if write access is requested.
  191. •  Rewrote GetObjectLocation so that it calls PBGetCatInfo fewer times (worst case is two calls). That makes the code a little harder to read, but on slow volumes (for example, AppleShare volumes over AppleTalk Remote Access), fewer calls *is* better.
  192. •  Replaced the static pcpy functions with calls to BlockMoveData (which is BlockMove if you don't have System Update 3.0, System 7.5, or later).
  193. •  The routines in MoreDesktopMgr (used to be in MoreFilesExtras) can get APPL mappings, icons, and comments from the “Desktop” file if the Desktop Manager isn't supported by a volume.
  194. •  NameFileSearch and CreatorTypeFileSearch in MoreFilesExtras now call PBCatSearchSyncCompat in Search so that they can search on all volumes.
  195. •  Tweaked all headers so that they can be read by a future "documentation viewer" project.
  196.  
  197. Bugs fixed:
  198. •  Changed DTCopyComment to use Str255 instead of unsigned char commentBuffer[199]. PhotoCD's wrongly return up to 255 characters instead of 200 characters and that was trashing memory.
  199. •  Changed FSMakeFSSpecCompat to fix Macintosh PC Exchange 1.0.x bug.
  200. •  Fixed a couple of bugs in GetFilenameFromPathname.
  201. •  Fixed ChangeFDFlags and ChangeCreatorType to get the real vRefNum before calling BumpDate. BumpDate was “bumping” the wrong object in some cases.
  202. •  Fixed GetParentID so that it gets the right parent ID in all cases (HFS has a weird bug that I work around).
  203. •  Cleared ioFVersNum field for all PBHOpenDF, PBHOpenRF, PBHOpen, PBHCreate, PBHDelete, PBHGetFInfo, PBHSetFInfo, PBHSetFLock, PBHRstFLock, and PBHRename calls. Not needed for HFS volumes, but some of those old MFS volumes might still be around.
  204. •  Changed the macro name hasLocalList to hasLocalWList to match bit name in Files.h.
  205. ________________________________________
  206.  
  207. v1.2.1  08/09/94
  208.  
  209. New Routine:
  210. •  Added HGetVInfo to MoreFilesExtras. Like GetVInfo, this routine returns the volume name, volume reference number, and free bytes on the volume; HGetVInfo also returns the total number of bytes on the volume, and both freeBytes and totalBytes are unsigned longs so this routine returns accurate information when used on volumes larger than 2 Gigabytes.
  211.  
  212. Bugs fixed:
  213. •  Changed PBCatSearchSyncCompat to only check the bHasCatSearch bit once instead of twice in a row.
  214. •  Changed CheckForMatches to pass EqualString cPB->hFileInfo.ioNamePtr instead of the uninitialized variable itemName. Now, searching using fsSBFullName works.
  215. •  Changed PreflightFileCopySpace to use unsigned variables in space calculations.
  216. •  Changed PreflightDirectoryCopySpace to use unsigned variables in space calculations. Now, I'm 4 GB clean.
  217. ________________________________________
  218.  
  219. v1.2.2  11/01/94
  220.  
  221. Bugs fixed (all in Search.c):
  222. •  Changed IndexedSearch to correctly handle non-fnfErr error results. IndexedSearch now just backs out a level when a non-fnfErr error result is returned.
  223. •  Changed IndexedSearch to correctly check for parent directory changes when return to a parent directory.
  224. •  Changed IsSubString to work correctly.
  225. ________________________________________
  226.  
  227. v1.3  04/17/95
  228.  
  229. New Routines:
  230. •  Added FullPath which includes the routines GetFullPath, FSpGetFullPath, LocationFromFullPath, and FSpLocationFromFullPath. These routines work with full pathnames longer than 255 characters.  Read the warning at the top of the interface files for reasons why you shouldn't use them most of the time.
  231. •  Added GetFileSize and FSpGetFileSize functions to MoreFilesExtras.
  232. •  Added FSWriteVerify function to MoreFilesExtras.
  233. •  Added FindDrive function to MoreFilesExtras.
  234. •  Added GetDriverName to MoreFilesExtras.
  235.  
  236. Bugs fixed:
  237. •  CopyFork used srcPB to reset the destination fork (which reset the source file's mark again). It now uses dstPB.
  238. •  On 68000 processor based Macintosh systems (Macintosh Plus, SE, etc.), PBGetCatInfo doesn't accept a pointer to a zero-length string as its ioNamePtr input parameter. If you pass an empty string, PBGetCatInfo returns bdNamErr (-37). So, all MoreFiles code (changes made to MoreFilesExtras, MoreDesktopMgr and FileCopy) that calls PBGetCatInfo with ioFDirIndex==0 now checks for that condition and sets ioNamePtr to NULL if a zero-length string would have been input.
  239.  
  240. Other changes:
  241. •  Made various minor changes to remove static global data from 68K code whenever possible.
  242. •  Added the conditional GENERATENODATA to FSpCompat.c. If GENERATENODATA is false, the code will be faster, but will use a few static globals. If GENERATENODATA is true, the code will be slightly slower, but won't use any static globals. You may find it useful to set GENERATENODATA to true if you want to use the FSpCompat code in stand-alone/non-CFM code.
  243. •  Changed all code to use new routine names (i.e., DisposePtr instead of DisposPtr, UpperString instead of UprString, etc.).
  244. •  MoreFiles uses the 2.0 Universal Headers. All references to old header files have been removed.
  245. •  Moved NameFileSearch and CreatorTypeFileSearch from MoreFilesExtras to Search. That puts all of the PBCatSearch related code in one place and removed the only static global data in MoreFilesExtras.
  246. •  Moved #includes that aren't needed in the header files, but are needed for the source code, into the source files.
  247. •  Removed THINK C libraries from libraries folder. The MPW ".o" libraries should work everywhere since most development environments can use or convert them in this format.
  248. •  Dropped MoreFiles Reference - I'll look into supplying a QuickView™ database in the future.
  249. ________________________________________
  250.  
  251. v1.3.1  06/17/95
  252.  
  253. New Routine:
  254. •  Added GetDiskBlocks function to MoreFilesExtras.
  255.  
  256. Bugs fixed:
  257. •  Changed work-around for problems that affected PBGetCatInfo when ioNamePtr = NULL or ioNamePtr = "\p" because of a problem in old versions of File Sharing. This change affected the following routines: (in FileCopy) GetDestinationDirInfo, (in MoreDesktopMgr) GetCommentID, (in MoreFilesExtras) GetDInfo, SetDInfo, GetDirID, GetDirName, GetParentID, GetObjectLocation, CheckObjectLock, BumpDate, ChangeFDFlags, CopyFileMgrAttributes, (in Search) GetDirModDate.
  258. •  The static function GetDirModDate in Search was only returning the low word of the modification date. There was only a slight chance that this would cause a problem since IndexedSearch uses the modification date only to detect if something in the directory changed.
  259. •  In FileCopy, I was calling CopyFileMgrAttributes and passing it a pointer to the copyName string pointer instead of just passing copyName.
  260. •  Changed GetDirID so that it really returns the parent directory if the specified object is a file.
  261. •  FullPath wasn't in MoreFilesLib.o library files.
  262. •  HasFSpExchangeFilesCompatibilityFix and HasFSpCreateScriptSupportFix weren't static in FSpCompat.
  263.  
  264. Other changes:
  265. •  Changed Share, Unshare, and GetUGEntry to use (void *) in parameter block type cast. That lets it compile without warnings using both the old and new Files.h header files.
  266. •  Changed all cases of "spec: FSSpec" in the Pascal interfaces to "{CONST}VAR spec: FSSpec" so they will work with PowerPC Pascal compilers.
  267. • MoreFiles Reference is still included.
  268. ________________________________________
  269.  
  270. v1.4  12/21/95
  271.  
  272. New Routines:
  273. •  Added directory scanning functions, IterateDirectory and FSpIterateDirectory in a new files IterateDirectory.c, IterateDirectory.h and IterateDirectory.p. Check these routines out. I think you'll find them useful.
  274. •  Added SetDefault and RestoreDefault to MoreFileExtras. These routines let you set the default directory for those times when you're stuck calling standard C I/O or a library that takes only a filename.
  275. •  Added XGetVInfo to MoreFilesExtras. Like GetVInfo, this routine returns the volume name, volume reference number, and free bytes on the volume; like HGetVInfo, XGetVInfo also returns the total number of bytes on the volume. Both freeBytes and totalBytes are UnsignedWide values so this routine can report volume size information for volumes up to 2 terabytes. XGetVInfo's glue code calls through to HGetVInfo if needed to provide backwards compatibility.
  276.  
  277. Bugs fixed:
  278. •  Fixed bug where FileCopy could pass NULL to CopyFileMgrAttributes if PBHCopyFile was used.
  279. •  Added 68K alignment to MoreDesktopMgr.c structs.
  280. •  Added 68K alignment to MoreFilesExtras.p records.
  281.  
  282. Other changes:
  283. •  Conditionalized FSpCompat.c with SystemSevenOrLater and SystemSevenFiveOrLater so the FSSpec compatibility code is only included when needed. It makes the code a little harder to read, but it removes 2K-3K of code and the overhead of additional calls when SystemSevenOrLater and SystemSevenFiveOrLater are true. See ConditionalMacros.h for an explanation of SystemSevenOrLater and SystemSevenFiveOrLater.
  284. •  Moved the code to create a full pathname from GetFullPath to FSpGetFullPath. This accomplished two goals: (1) when FSpGetFullPath is used, the input FSSpec isn't passed to FSMakeFSSpecCompat (it was already an FSSpec) and (2) the code is now smaller. While I was in the code, I changed a couple of calls from Munger to PtrToHand.
  285. •  Changed GetDirID to GetDirectoryID so that MoreFiles could be used by MacApp programs (There's a MacApp method named GetDirID).
  286. •  Changed DirIDFromFSSpec to FSpGetDirectoryID to be consistent in naming conventions.
  287. •  Added macros wrapped with "#if OLDROUTINENAMES … #endif" so GetDirID and DirIDFromFSSpec will still work with your old code.
  288. •  Changed alignment #if's to use PRAGMA_ALIGN_SUPPORTED instead of GENERATINGPOWERPC (will they ever stop changing?).
  289. •  Changed all occurances of filler2 to ioACUser to match the change in Universal Interfaces 2.1.
  290. •  Added type-casts from "void *" to "Ptr" in various places to get rid of compiler warnings.
  291. •  Added CallCopyErrProc to DirectoryCopy.h and DirectoryCopy.c (it just looks better that way).
  292. •  Added the "__cplusplus" conditional code around all .h header files so they'll work with C++.
  293. •  Built libraries with Metrowerks, THINK C, and MPW so everyone can link.
  294.  
  295. ________________________________________
  296.  
  297. v1.4.1  1/6/96
  298.  
  299. Bugs fixed:
  300. •  Fixed the conditionalized code FSpCreateCompat.
  301. •  Fixed the conditionalized code FSpExchangeFilesCompat.
  302. •  Fixed the conditionalized code FSpCreateResFileCompat.
  303.  
  304. Other changes:
  305. •  Changed PBStatus(&pb, false) to PBStatusSync(&pb) in GetDiskBlocks.
  306. ________________________________________
  307.  
  308. Thanks again (you know who you are) for the bug reports and suggestions that helped improve MoreFiles since the last version(s). If you find any more bugs or have any comments, please let us know at:
  309.  
  310. AppleLink: DEVFEEDBACK
  311.  
  312. Internet: devfeedback@AppleLink.Apple.com
  313.  
  314. Please put "Attn: MoreFiles, DTS/ADS group" in the message title.
  315.